﻿using Onshi.POS.Modelo.Entidades.Tipos;
using Onshi.POS.Modelo.Enumeradores;
using Onshi.POS.Modelo.Objectos;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Onshi.POS.Modelo.Entidades
{
    [Serializable]
    public class Impuesto : EntidadSimple<Int32>
    {
        #region Constructores

        public Impuesto() :
            base()
        {
        }

        #endregion

        #region Atributos

        private Decimal valor;
        private Decimal montoAplicable;
        private Decimal montoMaximo;
        private TipoImpuesto tipo;
        private Boolean estaEliminado;

        #endregion

        #region Propiedades

        public String Estado
        {
            get { return !estaEliminado ? "Activo" : "Inactivo"; }
        }

        public Boolean EstaEliminado
        {
            get { return estaEliminado; }
            set { estaEliminado = value; }
        }

        public Decimal Valor
        {
            get { return valor; }
            set { valor = value; }
        }

        public Decimal MontoAplicable
        {
            get { return montoAplicable; }
            set { montoAplicable = value; }
        }

        public Decimal MontoMaximo
        {
            get { return montoMaximo; }
            set { montoMaximo = value; }
        }

        public String TipoNombre
        {
            get { return tipo.Nombre; }
        }

        public TipoImpuesto Tipo
        {
            get { return tipo; }
            set { tipo = value; }
        }

        public String ValorFormato
        {
            get
            {
                var impuestoFormato = String.Empty;
                switch ((EnumTiposImpuestos)tipo.Id)
                {
                    case EnumTiposImpuestos.MontoFijo:
                        impuestoFormato = Formato.Moneda(valor);
                        break;
                    case EnumTiposImpuestos.Porcentaje:
                        impuestoFormato = Formato.Porcentaje(valor);
                        break;
                }
                return impuestoFormato;
            }
        }

        public String MontoAplicableFormato
        {
            get { return Formato.Moneda(montoAplicable); }
        }

        public String MontoMaximoFormato
        {
            get
            {
                var montoMaximoFormato = String.Empty;
                switch ((EnumTiposImpuestos)tipo.Id)
                {
                    case EnumTiposImpuestos.Porcentaje:
                        montoMaximoFormato = Formato.Moneda(montoMaximo);
                        break;
                }
                return montoMaximoFormato;
            }
        }

        #endregion
    }
}
